Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pager (stronicowanie), klasa, php4 i php5
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




info
pobierz

Hejka, prezentuję klasę Pager. Umożliwia ona wygenerowanie pager'a oraz pobranie aktualnych indexów rekordów.

Użycie jest proste:

  1. <?php
  2.    $pager = new Pager('idPagera');
  3.    //okreslenie liczby wszystkich rekordów na 500
  4.    $pager->SetTotalRecords(500);
  5.    echo $pager->Render();//wyswietlenie pagera
  6. ?>


Polączenie pagera z pobieraniem rekordów z bazy:
  1. <?php
  2.    $sql = 'select count(*) from TABLE';
  3.    $result = mysql_query($sql);
  4.    $row = mysql_fetch_array($result);
  5.    $recordsCount = $row[0];//pobranie liczby rekordów
  6.    $pager = new Pager('idPagera');
  7.    $pager->SetTotalRecords($recordsCount);//ustawienie liczby rekordów
  8.    //wygenerowanie pagera i zapamietanie go w zmiennej w celu
  9.    //pozniejszego wyswietlenia
  10.    $renderPager = $pager->Render();
  11.    $start = $pager->GetIndexRecordStart();//pobranie indexu rekordu początkowego
  12.    $end = $pager->GetIndexRecordEnd();//pobranie indexu rekordu koncowego
  13.    //zapytanie z uwzglenieniem stronicowania
  14.    $sql = 'select * from TABLE limit '.$start.','.($end - $start + 1);
  15.    //...pobranie wyników i ich wyswietlenie
  16.    echo $renderPager; //wyswietlenie pager'a
  17. ?>

(edit: te przyklady od wersji 2.5 troche inaczej beda wygladac. poprawne kody w paczce)

W podanym przykladzie brakuje oczywiscie sprawdzania, czy dane zapytanie wykonalo sie poprawnie itp. Nie podawałem tego jednak po to, by nie zaciemniać kodu.


Klasa generuje unikalne dla każdego pagera (poprzez idPager'a) zmienne, dzięki czemu na stronie może byc kilka pagerów do różnych tabel. Dodatkow, jesli korzystacie z sesji, klasa pamieta strony w sesji, dzięki czemu nie tracone są informacje o aktualnej stronie przy odwiedzaniu innych linków


Klasa ma 3 sposoby przechodzenia do kolejnych stron:
1) generuje własny wewnetrzny formularz i go submituje
Konstruktor tylko z pierwszym argumentem
2) korzysta z zewnetrznego formularza i musi byc w nim zawarta
Konstruktor z pierwszym i trzecim argumentem. Jako trzeci argument należy podać
idFormularza zawnętrznego
3) poprzez linki. Należy wówczas określić drugi parametr w konstruktorze, który będzie linkiem podstawowym. Do niego dodany będzie parametr odnosnie strony. Ten sposób generuje ogólne zmienne dla pagera, przez co lepiej żeby dla niego na stronie byl tylko jeden pager. Sposób ten może być wykorzystywany przy wyszukiwarkach.

To chyba wszystko. Wszelkiego rodzaju uwagi, sugestie bądź wynalezione błędy proszę zgłaszać. Wysłucham każdej (IMG:style_emoticons/default/smile.gif)

Aha, sposób implemetncji klasy dostosowany do php4. Klasa nie korzysta z żadnych dziwnych funkcji, więc można łatwo dostosować ją do php5. Należy tylko metody i zmienne deklarować w sposób odpowiedni dla php5.

Wszystkie metody i zmienne zaczynajace się na podkreslenie (_) oznaczają, iż są to metody i zmienne prywatne.

A oto przykladowy widok pager'a:
Cytat
|<  <<  <  21  22  23  24  25  26  27  28  29  30  z 200  >  >>  >|

oczywiscie wszystko to linki oprócz aktualnej strony.

Pager jest łatwo konfigurowalny. MOżecie sami okreslic liczbe rekordów na stronie, liczbę stron w pagerze itp.

A pozatym niech wam dobrze służy (IMG:style_emoticons/default/smile.gif)

edit (2006-04-03)
W związku z licznymi uwagami, by klasa nie generowala linkow co x, tylko pare linków przed stroną i parę linków po, wprowadzilem lekkie modyfikacje. Sposób uzywania klasy nie uległ zmianie (jest kompatybilna wstecz (IMG:style_emoticons/default/smile.gif) ). Chcąc użyc nowej metody generowania linków, wystarczy wywołać metodę render() z parametrem true:
  1. <?php
  2. echo $pager->Render(true);
  3. ?>

Mam nadzieję, że w ten sposób usatysfakcjonowałem parę osób (IMG:style_emoticons/default/winksmiley.jpg)

edit (2006-06-13)
Dawno nic nie pisalem. Czas zmienic. A wiec jest wersja 2.0
Główne zmiany:
1) odejscie od przesylania pagera formularzem
2) zapisywanie Pagera do tablicy, z której mozna samemu wygenerowac kod html Pager'a
3) PLucie wyjatkami (IMG:style_emoticons/default/smile.gif)
4) no i obecna wersja jest pod php5. Niedlugo dorobie tez wersje pod php4.

Zapraszam do sciagania i testowania.
W paczce jest kilka przykaldow, min. jak nalezy doczepic generowanie wlasnego kodu html.

Jesli zrobicie swoja funkcje generujaca kod html i bedziecie chcieli sie nia podzielic, wyslijcie mi a ja upublikuje wersje demo z wasza funkcja i wygladem pagera.

edit: 2.0 jest juz i pod php4

edit (2006-08-22)
Wersja 2.01:
- dorobilem na szybko ten link. teraz w konstruktorze, jesli podamy drugi parametr i bedzie w nim ciag:
#PAGE# to link ten zostanie niezmieniony, czyli bedzie tak jak user podal, za wyjatkiem #PAGE#, ktore zostanie zamienione na numer strony
Czyli dla przykladu co podal AxZx powinno byc:
  1. <?php
  2. $pager = new Pager('idPagera', 'wszystkie_numery_#PAGE#');
  3. ?>


- metoda Render moze zwracac teraz tablicę pagera zamiast kodu html. Należy ustawic na true jej trzeci parametr

edit (2007-07-26)
Wersja 2.5. Więcej info tu: http://nospor.pl/pager-2.5.html
Go to the top of the page
+Quote Post
12 Stron V  « < 9 10 11 12 >  
Start new topic
Odpowiedzi (200 - 219)
br0nks
post
Post #201





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.01.2011

Ostrzeżenie: (0%)
-----


  1. <?
  2. //Ładowaniu pliku konfiguracyjnego bazy danych i połączenie z bazą
  3. include "config.php";
  4.  
  5. //Ustalenie ilości wyświetlanych newsów na stronie
  6. define('limit_newsow', 15);
  7.  
  8. $result = "SELECT SQL_CALC_FOUND_ROWS * FROM newsy ORDER BY id DESC, id DESC LIMIT ".mysql_escape_string((int)$_GET['s'] *limit_newsow).",".limit_newsow;
  9.  
  10. //Pobiera ilosc_newsow rekordów z bazy, sortując wg daty rosnąco, zaczynając od $_GET['s']*ilosc_newsow
  11. $RES = mysql_query($result); // wykonujemy zapytanie
  12. while($AFR = mysql_fetch_assoc($RES)){
  13.  
  14. /*Wyświetlanie wyników:*/
  15.  
  16. $id=''.$AFR['id'].'';
  17. $text=''.$AFR['text'].'';
  18.  
  19.  
  20. echo "$id - $text";
  21.  
  22. }
  23.  
  24. ?>


  1. <?php
  2. require_once('Pager.class.php');
  3. $sql = 'select count(*) from newsy';
  4. $result = mysql_query($sql);
  5. $row = mysql_fetch_array($result);
  6. $recordsCount = $row[0];//pobranie liczby rekordĂłw
  7. try{
  8. $pager = new Pager('s');
  9. $pager->SetTotalRecords($recordsCount);
  10. $pager->Make(true);
  11. $pag = $pager->Render();
  12. $start = $pager->GetIndexRecordStart();
  13. $end = $pager->GetIndexRecordEnd();
  14. }
  15. catch (Exception $e) {
  16. echo $e->getMessage();
  17. }
  18.  
  19. //zapytanie z uwzglenieniem stronicowania
  20. $sql = 'select * from newsy limit '.$start.','.($end - $start + 1);
  21. //...pobranie wynikĂłw i ich wyswietlenie
  22.  
  23. echo $pag;//wyswietlenie pager'a
  24. ?>



i caly czas chodzi o to co wyzej:)
ze gdy mam index.php?s=0 to wzsystko jest tak jak aktualnie w bazie,
a gdy klikne na index.php?s=1 to pokazuja mi sie rekordy nie kolejne, tylko jeszcze kolejne, czyli omija jedna 15nastke... i pod s=1 mam to co POWINNO byc pod s=2. a pod s=0 to co pod s=1 winno byc:)

i chcialbym aby index.php?s=0 bylo tym index.php?s=1
a nie idzie tego zrobic :/

jasniej chyba sie nie da ;p
Go to the top of the page
+Quote Post
nospor
post
Post #202





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przecież pierwszy kod który pokazałeś w poście wyżej nie ma żadnego związku z moim pagerem.
Drugi zaś kod co pokazałeś jest moim kodem na żywca skopiowanym z przykładu.

NIgdzie nie podpiąłeś mojego pagera u siebie więc naprawdę nie wiem skąd te pytania, że coś nie działa, skoro nigdzie nie podpiąłeś mojego pagera
Go to the top of the page
+Quote Post
br0nks
post
Post #203





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.01.2011

Ostrzeżenie: (0%)
-----


teraz to ja nie rozumiem (IMG:style_emoticons/default/biggrin.gif) hahahaha

ten 2gi kod to nie Twoj pager?
bo wsumie to juz sam nie rozumiem..

no to jak mam zrobic, zeby ten moj 1 kod, ktory wyswietla newsy, zastapic Twoim? bo nie widze nic, co bym mogl zrobic, z Tych Twoich plikow..
sora, ale naprwde nie kumam ocb w tym pagerze:)

jakies rozwiazanie? pomoc?

ps: mam tylko w mojej tabeli: id, ile, text
newsy moje potrzebuja tylko id i text, a widze, ze u CIebie jest jeszcze jakeis sortowanie.. kurde nie kminie tego ;p

EDIT:
Hm.. chyba sobie z tym poradzilem:)
teraz sprawdze kilka rzeczy, czy da rade tak jak ja to widze, i dam tu znac:)


EDIT2:
no i wsyzstko smiga, ale strna wyglada jakby wolniej dzialala...
i zostaje tylko juz jedno... jak zrobic aby zamiast >| byl numer ostatniej strony?

i czy mozna tak zrobic ta nawigacje aby wygladala tak:
http://woork.blogspot.com/2008/03/perfect-...-using-css.html
lub tak:
http://www.thewebhelp.com/css/pagination-style-template/?

pozdrawiam:)

Ten post edytował br0nks 28.02.2011, 18:40:25
Go to the top of the page
+Quote Post
nospor
post
Post #204





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
i zostaje tylko juz jedno... jak zrobic aby zamiast >| byl numer ostatniej strony?

i czy mozna tak zrobic ta nawigacje aby wygladala tak:
http://woork.blogspot.com/2008/03/perfect-...-using-css.html
lub tak:
http://www.thewebhelp.com/css/pagination-style-template/?
Oczywiście, że można. Na wiele sposobów.
Możesz napisać funkcję generującą kod pagera, możesz przekazać funkcję generującą kod pagera, możesz pobrać tablicę pagera i sam wygenerować dla niej kod. Wszystko masz w przykładach w paczce
Go to the top of the page
+Quote Post
br0nks
post
Post #205





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.01.2011

Ostrzeżenie: (0%)
-----


sweitnie, nie pomogles mi w niczym o co pytalem.. dzieki wielkie.
Go to the top of the page
+Quote Post
nospor
post
Post #206





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




(IMG:style_emoticons/default/blink.gif)
Go to the top of the page
+Quote Post
br0nks
post
Post #207





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.01.2011

Ostrzeżenie: (0%)
-----


Nie wiem co się stało, ale nagle z dnia na dzień, przestał działać...a nie zmieniałem nic od miesiąca na stronie...

Kod
Parse error: syntax error, unexpected '{' in /index.php on line 316


a 316 linijka index.php wygląda tak:
Kod
try{


a całe zapytanie tak:
  1. <?php
  2. require_once('Pager.class.php');
  3. $sql = 'select count(*) from newsy';
  4. $result = mysql_query($sql);
  5. $row = mysql_fetch_array($result);
  6. $recordsCount = $row[0];//pobranie liczby rekordĂłw
  7. try{
  8. $pager = new Pager('s');
  9. $pager->SetTotalRecords($recordsCount);
  10. $pager->Make(true);
  11. $pag = $pager->Render();
  12. $start = $pager->GetIndexRecordStart();
  13. $end = $pager->GetIndexRecordEnd();
  14. }
  15. catch (Exception $e) {
  16. echo $e->getMessage();
  17. }
  18.  
  19. //zapytanie z uwzglenieniem stronicowania
  20. $sql = 'select * from newsy limit '.$start.','.($end - $start + 1);
  21. //...pobranie wynikĂłw i ich wyswietlenie
  22.  
  23. echo $pag;//wyswietlenie pager'a
  24. ?>


lub jeżeli usunę całe to zapytanie, to wyskakuje kolejny błąd:
  1. Parse error: syntax error, unexpected T_CONST, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /Pager.class.php on line 34


a 34 linijka Pager.class.php wygląda tak:
Kod
const GOTO_FIRST = 'gtf';


i o co tu chodzi to nie mam pojęcia...a nawet nic nie zmieniałem od kiedy wszystko dobrze działało..
Go to the top of the page
+Quote Post
nospor
post
Post #208





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Odpalsz skrypt napisany w php5 na php4.
Skoro nagle ci przestało działać to zapewne zmienił ci się php (IMG:style_emoticons/default/smile.gif)

NIe masz przypadkiem hostingu w 1and1? Tam na dniach właśnie zrobili downgrade z php5 na php4 i kupie ludzi przestały działać aplikacje (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
br0nks
post
Post #209





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.01.2011

Ostrzeżenie: (0%)
-----


dokładnie tam mam hosta..
i co teraz mam zrobić z tym fantem? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
dawidox66
post
Post #210





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 28.04.2011

Ostrzeżenie: (0%)
-----


a w ogole jaki cel jest takiego downgrade?
Go to the top of the page
+Quote Post
mlawnik
post
Post #211





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

Ostrzeżenie: (0%)
-----


Może rozszerzenie *.php5?

Ale jak wywalili php5 to zmiana dostawcy :|
Go to the top of the page
+Quote Post
br0nks
post
Post #212





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.01.2011

Ostrzeżenie: (0%)
-----


Cytat(mlawnik @ 28.04.2011, 21:22:14 ) *
Może rozszerzenie *.php5?



dokładnie tak. gra gitarka teraz (IMG:style_emoticons/default/guitar.gif)

dzieki (IMG:style_emoticons/default/rolleyes.gif)
Go to the top of the page
+Quote Post
mlawnik
post
Post #213





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

Ostrzeżenie: (0%)
-----


Proszę bardzo.
Go to the top of the page
+Quote Post
br0nks
post
Post #214





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.01.2011

Ostrzeżenie: (0%)
-----


a nie da się jakoś zrobić aby nie wpisywać rozszerzenia .php5 tylko aby było ,php a żeby plik sam rozpoznał ze to php5?
np żeby coś dopisać na początku pliku .php?

edit:
na 1and1.pl zadziałało, do .htaccess:
Kod
AddType application/x-httpd-php5 .php5


gdyby ktoś potrzebował(IMG:style_emoticons/default/smile.gif)

Ten post edytował br0nks 28.04.2011, 22:47:51
Go to the top of the page
+Quote Post
lobopol
post
Post #215





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

Ostrzeżenie: (0%)
-----


Mam problem ze zdefiniowanym linkiem
  1. $oPager = new lib_Pager('pagination', lib_Url::make('main',array('page'=>'#PAGE#')),false); //link ma formę link,#PAGE#.html
  2. $oPager->SetTotalRecords(10000);
  3. $oPager->SetRecordsPerPage(10);
  4. $oPager->SetPagesPerNav(10);
  5. $oPager->Make();
  6. $this->sNav = $oPager->Render();
  7.  

Paginacja jest tworzona, ale nie zmieniają się linki w niej po przejściu na kolejne strony

Ps. Już sobie poradziłem drobna modyfikacja aby nie patrzeć na geta, a na parametr przekazywany

Ten post edytował lobopol 11.05.2011, 16:53:02
Go to the top of the page
+Quote Post
northwest
post
Post #216





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


Witam serdecznie,
mam taki kod:
  1. try {
  2. $tablicailosci = $ms->query_select("SELECT COUNT(id) AS ile FROM baza ;");
  3. } catch (Exception $error) {
  4. echo '<b>Komunikat</b>: ' . $error->getMessage() . '<br /><b>Plik</b>: ' . $error->getFile() . '<br /><b>Wiersz</b>: ' . $error->getLine() . '<br /><b>IP</b>: ' . $_SERVER['REMOTE_ADDR'] . ' | <b>LINK</b>: ' . $_SERVER['REQUEST_URI'] . '<br /><br />' . $error->getTraceAsString();
  5. }
  6. try {
  7. //$pager = new Pager($webid['4'], "$url/cars/komis/page/#PAGE#", 'strona');
  8. $pager = new Pager('', "$url/cars/komis/page/#PAGE#");
  9. $pager->RecordsPerPage = 1;
  10. $pager->SetTotalRecords($tablicailosci['0']['ile']);
  11. $pager->Make(true);
  12. $pag = $pager->Render();
  13. $start = $pager->GetIndexRecordStart();
  14. $end = $pager->GetIndexRecordEnd();
  15. } catch (Exception $e) {
  16. echo $e->getMessage();
  17. }

linki mam w takiej formie: mojanazwa.pl/cars/komis/page/1 , mojanazwa.pl/cars/komis/page/2 itp...

Menu wyświetla mi się poprawnie, tylko jak kliknę na jakąś stronę, to nie zaznacza się poprawna wartość na tej paginacji (IMG:style_emoticons/default/sad.gif)
np mam : 1,2,3,4,5,6 - klikam na 4, strona się przaładowywuje ale dalej mam zaznaczoną 1 (IMG:style_emoticons/default/sad.gif)


Wie ktoś może dlaczego?


northwest
Go to the top of the page
+Quote Post
nospor
post
Post #217





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No ale w $_GET Twój ruter ustawia index page?

Zrób
print_r($_GET);
zapewne go tam nie ma.
Jeśli nie ma to ty będziesz musiał ręcznie dla pagera ustawiać stronę.
Go to the top of the page
+Quote Post
northwest
post
Post #218





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


tablica jest pusta (IMG:style_emoticons/default/sad.gif)

Jak ręcznie wstawić pozycję? zamiast #PAGE dać wartość "ręcznie"?

zmieniłem na próbę na coś takiego: $pager = new Pager('', "$url/cars/komis/page/3");
i teraz linki są w formie:
http://localhost/cars/komis/page/3?pp=4
http://localhost/cars/komis/page/3?pp=7
http://localhost/cars/komis/page/3?pp=5

i zaznacza poprawnie... tylko te zmienne są na końcu, a chciałbym żeby były po "page"...

wiesz może dlaczego tak jest?
Go to the top of the page
+Quote Post
nospor
post
Post #219





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie, masz zostawić wszystko jak było, nic nie kombinuj.
Powiedzialem, że musisz jedynie ręcznie ustawić aktualną strone a ty to źle zrozumiałeś.
Masz zrobić tak:
  1. //.....
  2. $pager = new Pager('', "$url/cars/komis/page/#PAGE#");
  3. $pager->SetActualPage(XYZ); //TU ZA XYZ masz wstawić aktualną stronę. Ty ją znasz bo to ty generujesz ładny url i twój ruter ma gdzieś info o page
  4. $pager->RecordsPerPage = 1;
  5. $pager->SetTotalRecords($tablicailosci['0']['ile']);
  6. $pager->Make(true);
  7. $pag = $pager->Render();
  8. //.....
Go to the top of the page
+Quote Post
northwest
post
Post #220





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


zrobiłem tak jak mówiłeś:
  1. $pager = new Pager('', "$url/cars/komis/page/#PAGE#");
  2. $pager->SetActualPage("$url/cars/komis/page/".$webid['4']);
  3. $pager->RecordsPerPage = 1;
  4. $pager->SetTotalRecords($tablicailosci['0']['ile']);
  5. $pager->Make(true);
  6. $pag = $pager->Render();


gdzie $webid['4'] zawiera aktualny numer strony i nie działa.... zaznacza uparcie 4 strone.... bez względu co wybiore:/
Go to the top of the page
+Quote Post

12 Stron V  « < 9 10 11 12 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.08.2025 - 00:43